package com.george.caffeine.config;

import com.github.benmanes.caffeine.cache.Caffeine;
import org.springframework.cache.CacheManager;
import org.springframework.cache.caffeine.CaffeineCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.TimeUnit;

/**
 * @title: CaffeineConfig.java
 * @description: Caffeine配置类
 * @author: George
 * @date: 2023/3/20 14:05
 */
@Configuration
public class CacheManagerConfig {

    /**
     * initialCapacity：初始缓存空大小
     * maximumSize：缓存的最大数量，设置这个值可以避免出现内存溢出
     * expireAfterWrite：指定缓存的过期时间，是最后一次写操作后的一个时间，此外，
     * 缓存的过期策略也可以通过expireAfterAccess或refreshAfterWrite指定。
     * @return
     */

    @Bean
    public CacheManager cacheManager(){
        CaffeineCacheManager cacheManager=new CaffeineCacheManager();
        cacheManager.setCaffeine(Caffeine.newBuilder()
                //初始大小
                .initialCapacity(128)
                //最大数量
                .maximumSize(1024)
                //过期时间
                .expireAfterWrite(60, TimeUnit.SECONDS));
        return cacheManager;
    }

}
